/** 生成相关工具 */

/**
 * 生成GUID
 *
 * @returns
 */
export const geneGUID = (): string => {
  // 获取当前时间戳（毫秒级）
  const timestamp = Date.now()

  // 将时间戳转换为 64 位数值（分散时间信息）
  const timeBits = BigInt(timestamp) * BigInt(0x123456789abcdef0n) // 魔法数用于分散时间特征
  const timeHigh = Number((timeBits >> BigInt(32)) & BigInt(0xffffffff))
  const timeLow = Number(timeBits & BigInt(0xffffffff))

  // 生成随机字节（16字节）
  const randomBytes = new Uint8Array(16)
  for (let i = 0; i < 16; i++) {
    // 融合时间信息（通过异或操作分散到随机字节中）
    const timeSeed = i % 2 === 0 ? timeHigh : timeLow
    randomBytes[i] = Math.floor(Math.random() * 256) ^ ((timeSeed >>> (i * 8)) & 0xff)
  }

  // 填充版本号（版本4：随机生成）
  randomBytes[6] = (randomBytes[6] & 0x0f) | 0x40 // 第7字节高4位设为0100（版本4）
  randomBytes[8] = (randomBytes[8] & 0x3f) | 0x80 // 第9字节高2位设为10（RFC4122规定的变体）

  // 转换为十六进制字符串
  const hex = Array.from(randomBytes, (byte) => byte.toString(16).padStart(2, '0')).join('')

  // 格式化为 8-4-4-4-12
  return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(16, 20)}-${hex.substring(20, 32)}`
}

/**
 * url地址拼接
 *
 * @param args url
 * @returns
 */
export const joinUrls = (...args: string[]): string => {
  // 清理每个参数的首尾斜杠（保留中间的）
  const cleaned = args.map((arg) => arg.replace(/^\/+|\/+$/g, '')).filter(Boolean)
  if (!cleaned.length) return '/' // 处理全空输入

  // 获取第一个原始参数（处理undefined情况）
  const firstOriginal = args[0] ?? ''
  // 判断第一个原始参数是否以斜杠开头（关键修正点）
  const startsWithSlash = firstOriginal.startsWith('/')

  // 拼接最终路径
  const joined = cleaned.join('/')
  return startsWithSlash ? `/${joined}` : joined
}
